#include "uart.h"
#include "LPC214x.h"
#include "armboard3.h"

void UART_init(void)
{
	// Initialize Pin Select Block for Tx and Rx
    PINSEL0 = 0x5;
    // Enable FIFO's and reset them
    U0FCR = 0x7;
    // Set DLAB and word length set to 8bits */
    U0LCR = 0x83;
    // Set baudrate
    U0FDR = 0x75;
    U0DLL = 0x13;//(unsigned char)baud;
    U0DLM = 0x00;//baud>>8;
 	// add fractional prescaler data? -> (5/(5+7)) for 9600 baud, add formula for calculation in 214x.h/uart.h?
    // Clear DLAB
    U0LCR = 0x3;
    // Clear interrupt bits
    U0IER = 0x00;
}

// Stuurt meegegeven adres en string uit op de UART, volgens afgesproken protocol
void UART_put(char *c, char a)
{
    int i=0; // teller om hele string langs te lopen
	char parity=0; // parity voor foutcontrole
	char temp=0; // wordt gebruikt bij berekenen parity

    // Wacht tot de buffer leeg is
    while(!(U0LSR & (1<<6)));

	U0THR=a; // Start byte = 1010101010
	temp=a;
	parity ^= temp;
	U0THR=a; // Adres
	temp=a;
	parity ^= temp;
	U0THR=0x00; // Leeg

    // Ga door tot het eind van de string ('\0') is berijkt, in dit geval 10 bytes.
	// Hou ook de parity bij.
    for(i=0;i<10;i++)
    {
        U0THR=c[i];

        temp=c[i];
		parity ^= temp;
    }

	U0THR=parity; // Verstuur foutcontrole byte.
	U0THR=0x00; //deze worden later mogelijk voor foutcorrectie gebruikt
	U0THR=0x00; // ^^^^^^^^^^^^^
	temp = 0;
	parity = 0;

	while(!(U0LSR & (1<<6)));
	
	return;
}
